package com.order.manager.Model.other;

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 通用RESTful响应结果封装类
 * 用于统一接口返回格式，支持泛型数据类型
 *
 * @param <T> 响应数据的类型参数
 */
@Data                  // 自动生成getter、setter、toString等方法
@AllArgsConstructor   // 自动生成全参数构造方法
public class RestBean<T> {
    /**
     * 操作是否成功的标志
     * true表示请求处理成功，false表示失败
     */
    private boolean success;

    /**
     * 响应状态码
     * 遵循HTTP状态码规范或自定义业务码
     */
    private int code;

    /**
     * 响应数据或错误信息
     * 使用泛型支持不同类型的数据返回
     */
    private T message;

    /**
     * 成功响应构造方法（带数据）
     * @param message 响应数据
     * @param <T> 数据类型
     * @return 成功状态的RestBean实例
     */
    public static <T> RestBean success(T message) {
        return new RestBean(true, 200, message);
    }

    /**
     * 成功响应构造方法（不带数据）
     * @param <T> 数据类型（默认String）
     * @return 成功状态的RestBean实例（message为"success"）
     */
    public static <T> RestBean success() {
        return new RestBean(true, 200, "success");
    }

    /**
     * 失败响应构造方法（带状态码和信息）
     * @param code 错误状态码
     * @param message 错误信息
     * @param <T> 信息类型
     * @return 失败状态的RestBean实例
     */
    public static <T> RestBean failure(int code, T message) {
        return new RestBean(false, code, message);
    }

    /**
     * 失败响应构造方法（默认状态码500）
     * @param message 错误信息
     * @param <T> 信息类型
     * @return 失败状态的RestBean实例（状态码500）
     */
    public static <T> RestBean failure(T message) {
        return new RestBean(false, 500, message);
    }
}